#pragma once
#include <string>
#include <fstream>
#include <iostream>

using namespace std;

class file_util
{
public:
    static bool read(const std::string filename, std::string &body)
    {
        // 1.打开文件
        std::ifstream ifs(filename.c_str(), std::ios_base::in);
        if (ifs.is_open() == false)
        {
            return false;
        }
        // 2.获取文件大小
        ifs.seekg(0, std::ios::end);   // 将文件的读取位置移动到文件末尾处
        size_t filesize = ifs.tellg(); // 获取文件当前的读取位置
        ifs.seekg(0, std::ios::beg);
        // 3.将文件所有数据读取出来
        body.resize(filesize);
        ifs.read(&body[0], filesize);
        // 这里不能传递body.c_str()，因为c_str()返回的是const char*，我们的目的就是将内容读取到body里，body的内容必须是可修改的
        if (ifs.good() == false)
        {
            ifs.close(); // 释放资源，否则内存泄露
            return false;
        }
        // 4.关闭文件
        ifs.close();
        return true;
    }
    static bool write(const std::string filename, std::string body)
    {
        std::ofstream ofs(filename.c_str(), std::ios_base::out | std::ios_base::app);
        if (ofs.is_open() == false) 
        {
            return false;
        }
        ofs << body.c_str();
        if(ofs.good() == false)
        {
            ofs.close();
            return false;
        }
        ofs.close();
        return true;
    }
};